﻿#pragma once

#include <SFML/Network.hpp>
#include "../../../domain/models/Card.h"
#include "../../../domain/models/CardsCollection.h"

namespace Views {
	namespace Models {
		namespace Network {
			/**
			* Pomocnicza klasa do serializacji i deserializacji graczy i ich typów
			*/
			class PlayersViewModel
			{
			public:
				/**
				* Wszystkie karty graczy w grze
				*/
				Cards::PlayersCards players_cards;
				/**< Kolejka graczy i ich typów do zapisania lub odczytana z pakietu */
				std::queue<std::pair<Cards::PlayerCard*, Players::PLAYER_TYPE>> players;

				/**
				* @param players Kolejka graczy do zapisania
				*/
				PlayersViewModel(std::queue<std::pair<Cards::PlayerCard*, Players::PLAYER_TYPE>> players);
				/**
				* @param players_cards Wszystkie karty graczy w grze
				*/
				PlayersViewModel(Cards::PlayersCards players_cards);

				/**
				* Zapisuje kolejkę graczy do pakietu
				* @param Packet Pakiet, do którego zapisywane są kartę
				* @param model Obiekt zawierający gracz do zapisania w atrybucie players
				*/
				friend sf::Packet& operator <<(sf::Packet& Packet, const PlayersViewModel& model);
				/**
				* Wczytuje zserializowane dane z packet i przeszukuje model.players_cards
				* w poszukiwaniu odpowiadającego gracza. Jeśli go znajdzie dodaje go do kolejki model.players
				* @param Packet Pakiet, z którego odczytywani są gracze
				* @param model Obiekt zawierający możliwych graczy do wczytania w atrybucie players_cards
				*/
				friend sf::Packet& operator >>(sf::Packet& Packet, PlayersViewModel& model);
			};
		}
	}
}

